const mongoose = require('mongoose');
let Schema = mongoose.Schema;

// 项目阶段数据模型 - 独立单表
let projectPhaseSchema = new Schema({
    // 基础信息
    id: { type: Number, required: true, unique: true }, // 阶段ID
    status: { type: String, default: '未开始' }, // 状态：已完成、进行中、未开始、已暂停
    statusType: { type: String, default: 'gray' }, // 状态类型：blue、orange、gray、red
    progress: { type: String, default: '0%' }, // 进度百分比

    // 阶段信息
    phase: { type: String, required: true }, // 阶段名称
    phaseType: { type: String, enum: ['自研', '分包'], default: '自研' }, // 阶段类型

    // 人员信息
    leader: { type: String, required: true }, // 负责人

    // 时间信息
    startTime: { type: Date, required: true }, // 阶段开始时间
    endTime: { type: Date, required: true }, // 阶段完结时间
    period: { type: Number, required: true }, // 工期天数
    hour: { type: Number, required: true }, // 工时（小时）

    // 实际完成信息
    realEndTime: { type: Date }, // 实际完成时间
    realPeriod: { type: Number }, // 实际工期天数
    realHour: { type: Number }, // 实际工时

    // 奖金信息
    bonusType: { type: String, default: '固定金额' }, // 项目奖金类型
    bonusAmount: { type: Number, default: 0 }, // 奖金金额

    // 配置信息
    calculateWorkTime: { type: Boolean, default: true }, // 是否计算项目工时
    isConfirmPhase: { type: Boolean, default: false }, // 是否为确认阶段
    isPaymentPhase: { type: Boolean, default: false }, // 是否为付款阶段

    // 文件信息
    deliverFiles: [{ type: String }], // 需交付文件列表
    files: { type: String }, // 文件描述

    // 备注信息
    remark: { type: String }, // 备注

    // 系统信息
    creator: { type: String }, // 创建人
    createTime: { type: Date, default: Date.now }, // 创建时间
    updateTime: { type: Date, default: Date.now }, // 更新时间
    days: { type: Number, default: 0 } // 创建至今的天数
});

// 创建索引
projectPhaseSchema.index({ id: 1 });
projectPhaseSchema.index({ status: 1 });
projectPhaseSchema.index({ createTime: -1 });

// 中间件：保存前更新时间
projectPhaseSchema.pre('save', function (next) {
    this.updateTime = new Date();
    next();
});

// 中间件：保存前计算天数
projectPhaseSchema.pre('save', function (next) {
    if (this.createTime) {
        const now = new Date();
        const diffTime = Math.abs(now - this.createTime);
        this.days = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
    }
    next();
});

let projectPhaseModel = mongoose.model('projectPhase', projectPhaseSchema, 'projectPhase');

module.exports = {
    projectPhaseModel
}; 